package logger

import (
	"fmt"
	"path"
	"runtime"
	"time"

	"github.com/golang/glog"
)

var LogLevel string = "0"

func init() {
	fmt.Println("日志初始化完毕")
}

// 自定义Info日志函数，支持格式化参数
func Info(msg string, args ...any) {
	if glog.V(1) { // 检查是否启用Info级别
		file, line := getCallerInfo(2)
		timestamp := time.Now().Format("2006-01-02-15:04:05")
		formattedMsg := fmt.Sprintf(msg, args...)
		glog.InfoDepth(1, formatLogMessage("INFO", file, line, timestamp, formattedMsg))
	}
}

// 自定义Warn日志函数，支持格式化参数
func Warn(msg string, args ...any) {
	if glog.V(1) { // 检查是否启用Warn级别
		file, line := getCallerInfo(2)
		timestamp := time.Now().Format("2006-01-02-15:04:05")
		formattedMsg := fmt.Sprintf(msg, args...)
		glog.WarningDepth(1, formatLogMessage("WARN", file, line, timestamp, formattedMsg))
	}
}

// 自定义Error日志函数，支持格式化参数
func Error(msg string, args ...any) {
	file, line := getCallerInfo(2)
	timestamp := time.Now().Format("2006-01-02-15:04:05")
	formattedMsg := fmt.Sprintf(msg, args...)
	glog.ErrorDepth(1, formatLogMessage("ERROR", file, line, timestamp, formattedMsg))
}

// 自定义Fatal日志函数，支持格式化参数
func Fatal(msg string, args ...any) {
	file, line := getCallerInfo(2)
	timestamp := time.Now().Format("2006-01-02-15:04:05")
	formattedMsg := fmt.Sprintf(msg, args...)
	glog.FatalDepth(1, formatLogMessage("FATAL", file, line, timestamp, formattedMsg))
}

// 获取调用者信息（文件名和行号）
func getCallerInfo(skip int) (string, int) {
	_, file, line, ok := runtime.Caller(skip)
	if !ok {
		return "unknown", 0
	}
	return path.Base(file), line
}

// 格式化日志消息
func formatLogMessage(level, file string, line int, timestamp, msg string) string {
	return fmt.Sprintf("[%s][%s][%d][%s]: %s ;", level, file, line, timestamp, msg)
}
